import java.util.Arrays;

 class Main {
    public int[] elem;
    public int usedSize;//0

    private static final int DEFAULT_SIZE = 10;

    public Main() {
        this.elem = new int[DEFAULT_SIZE];
    }

    public void display() {
        for (int i = 0; i < this.usedSize; i++) {
            System.out.print(this.elem[i]+" ");
        }
        System.out.println(" ");
    }

    // 新增元素,默认在数组最后新增
    public void add(int data) {
        if(this.isFull()){
            this.elem = Arrays.copyOf(this.elem,2*this.usedSize);
        } else {
            this.elem[this.usedSize++]=data;
        }
    }


    public boolean isFull() {
        if(this.usedSize==this.elem.length){
            return true;
        }
        return false;
    }

    //检查位置合法性
    private boolean checkPosInAdd(int pos) {
        if(pos<0||pos>usedSize){
            return false;
        }
        return true;//合法
    }

    // 在 pos 位置新增元素
    public void add(int pos, int data) {
        if(this.isFull()) {
            this.elem = Arrays.copyOf(this.elem, 2 * this.usedSize);
        } else if (this.checkPosInAdd(pos)){
            for (int i = usedSize-1; i >pos-1 ; i--) {
                this.elem[i+1]=this.elem[i];
            }

            elem[pos]=data;
            usedSize++;
        } else {
            System.out.println("插入失败，位置不合法，请检查位置的合法性！");
        }
    }

    // 判定是否包含某个元素
    public boolean contains(int toFind) {
        for (int i = 0; i < usedSize; i++) {
            if(this.elem[i]==toFind){
                System.out.println(toFind+" 查找成功！");
                return true;
            }
        }
        System.out.println(toFind+" 查找失败！");
        return false;
    }
    // 查找某个元素对应的位置
    public int indexOf(int toFind) {
        for (int i = 0; i < usedSize; i++) {
            if(this.elem[i]==toFind){
                System.out.println(toFind+" 查找成功，其下标为 "+i);
                return i;
            }
        }
        System.out.println(toFind+" 查找失败！");
        return -1;
    }

    // 获取 pos 位置的元素
    public int get(int pos) {
        if(checkPosInAdd(pos)){
            return this.elem[pos];
        }
        System.out.println(pos+" 位置不合法！");
        return 0;
    }

    private boolean isEmpty() {
        return false;
    }
    // 给 pos 位置的元素设为【更新为】 value
    public void set(int pos, int value) {
        if (this.checkPosInAdd(pos)){
            elem[pos]=value;
        } else {
            System.out.println("插入失败，位置不合法，请检查位置的合法性！");
        }

    }


    public void remove(int key) {
        for (int i = 0; i < usedSize; i++) {
            if (this.elem[i]==key){
                for (int j = i; j < usedSize; j++) {
                    this.elem[j]=this.elem[j+1];
                }
                usedSize--;
            }
        }
    }

    // 获取顺序表长度
    public int size() {
        return this.usedSize;
    }

    // 清空顺序表
    public void clear() {
        this.usedSize=0;
    }
}

public class myArrayList{
    public static void main(String[] args) {
        Main arr = new Main();
        arr.add(1);
        arr.add(2);
        arr.add(3);
        arr.display();
        System.out.println("==============");
        arr.add(0,0);
        arr.add(0,-1);
        arr.add(10,0);
        arr.display();
        System.out.println("==============");
        arr.contains(3);
        arr.contains(5);
        System.out.println("==============");
        arr.indexOf(3);
        arr.indexOf(5);
        System.out.println("==============");
        int i=arr.get(2);
        arr.get(7);
        System.out.println(i);
        System.out.println("==============");
        arr.set(1,5);
        arr.display();
        System.out.println("==============");
        arr.remove(5);
        System.out.println(arr.size());
        arr.display();
        System.out.println("==============");
        arr.clear();
        arr.display();

    }
}